<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<script type="text/javascript">
			// 异步的终极解决方案 ；
			//ES8： async await 终极解决方案；基于promise
			// 通过同步的形式改写异步代码 ；
			
			let fun1 = function(){
				return new Promise(res=>{
					setTimeout(()=>{
						res("1111");
					},1000)
				})
			}
			
			let fun2 = function(){
				return new Promise((res,rej)=>{
					setTimeout(()=>{
						rej("eror2222");
					},1000)
				})
			}
			
			let fun3 = function(){
				return new Promise(res=>{
					setTimeout(()=>{
						res("333");
					},1000)
				})
			}
			
			// promise里then链式调用；
			// fun1().then(res=>{
			// 	console.log(res);
			// 	return fun2();
			// }).then(res=>{
			// 	console.log(res);
			// 	return fun3();
			// }).then(res=>{
			// 	console.log(res);
			// }).catch(err=>{
			// 	console.log(err);
			// })
			
			// 调用形式上 ES8 async 及await 用的更多；
			// 异步代码改写成了 同步的写法；
			// 1.async 和await 要成对出现；
			// 2.await的标志 就是promise对象调用 reslove 或者reject
			// 3.await只能等待一个async函数里的结果；
			// async function fn1(){
			// 	await fun2();
			// }
			
			
			async function fn(){
				
				
				try{
					let res1 = await fun1();
					console.log(res1);
					let res2 = await fun2();
					console.log(res2);
					let res3 = await fun3();
					console.log(res3);
				}catch(err){
					console.log(err);
				}
				
				/* catch(err=>{
					console.log(err);
				})*/
				
			}
			fn();
			
			
			
			// let arr = [fun1,fun2,fun3];
			
			// // arr.forEach(async item=>{
			// // 	let res = await item();
			// // 	console.log(res);
			// // })
			
			// async function fn(){
				
			// 	for(let i=0;i<arr.length;i++){
			// 	let res =  await arr[i]();
			// 	console.log(res);
			// 	}
				
			// }
			// fn();
			
		</script>
	</body>
</html>
